// EC(G)
//  变量提升；
//     var a;
//     fn=0x000;[[scope]:EC(G)]
// console.log(a); //undefined
// var a=12; 
// function fn(){
//     // EC(FN)
//     //  作用域链:<EC(FN),EC(G)>
//     //  形参赋值：--
//     //  变量提升: var a;
//     console.log(a); //undefind
//     var a=13;   
// }
// fn();   
// console.log(a); // 12

// EC(G)
//  变量提升；
//     var a;
//     fn=0x000;[[scope]:EC(G)]
// console.log(a);  //undefined
// var a=12;
// function fn(){
//     // EC(FN)
//     //  作用域链:<EC(FN),EC(G)>
//     //  形参赋值：--
//     //  变量提升: --
//     console.log(a);//->不是自己的私有变量，是EC(G)中的全局变量 12
//     a=13;
// }
// fn();
// console.log(a); //->13

// EC(G)
//  变量提升；
//     fn=0x000;[[scope]:EC(G)]
// console.log(a); //->Uncaught ReferenceError: a is not defined
// a=12;
// function fn(){
//     console.log(a);
//     a=13;   
// }
// fn();
// console.log(a);

// EC(G) [老版本浏览器]
//  变量提升：
//  foo=0x000;[[scope]:EC(G)]
// console.log(foo); //->undefined
// {
//     console.log(foo);//->foo() {}
//     function foo() {}
//     foo = 1;//->私有的foo=1
//     console.log(foo);//->1
// }
// console.log(foo);//->ƒ foo() {}

// EC(G)
//  变量提升：
//      function foo;
//      function foo;
// console.log(foo); //->undefined
// {
//     // EC(BLOCK)
//     //  作用域链<EC(BLOCK,EC(G))>
//     //  变量提升：
//     //      foo = 0x001;[[scope]:EC(BLOCK)]
//     //      foo = 0x002;[[scope]:EC(BLOCK)]
//     //      ------
//     //      foo=0x002;

//     console.log(foo);//函数{2}
//     function foo() {1}//把之前对foo的操作映射给EC(G)一份=>全局foo=0x002
//     console.log(foo);//函数{2}
//     foo = 1; //把私有的foo=1
//     console.log(foo);//->1
//     function foo() {2}//把之前对foo的操作映射给EC(G)一份=>全局foo=1
//     console.log(foo); //->1
// }
// console.log(foo);//->1



// {
//     function foo() {}
//     foo = 1;
//     function foo() {}
//     foo = 2;
// }
// console.log(foo);//->1

// // EC(G)
// //  变量提升
// //   varx;
// //   func=0x001;[[scope]:EC(G)]
// // --------VO(G)/GO
// //      X=1
// //      func = 0x000;
// var x = 1;
// function func(x,y=function anonymous1(){x =2}){
//     // EC(FUNC)
//     //  作用域链:<EC(FUNC),EC(G)>
//     //  形参赋值:
//     //      x =5 
//     //      y=0x001;[[scope]:EC(FUNC)]
//     //  变量提升:----
//     // -------AO(FUNC)
//     //      x=3
//     //      y=0x001
//     x = 3;
//     y();
//     // EC(AN)
//     //  作用域链:<EC(AN),EC(FUNC)>
//     //  形参赋值:--
//     //  变量提升:--
//     //  代码执行：
//     //      x=2
//     console.log(x); //=>2
// }
// func(5);
// console.log(x); //=>1

// var x = 1;
// function func(x,y=function anonymous1(){x =2}){
//     var x = 3;
//     y();
//     console.log(x); 
// }
// func(5);
// console.log(x); 

// function fn(x,y=10){
//     var m =20;
// }
// fn(1,2)

// var x = 1;
// function func(x,y=function anonymous1(){x =2}){
//     // EC(FUNC)
//     //  作用域链<EC(FUNC),EC(G)>
//     //  初始化this：window
//     //  形参赋值：
//     //      x=5;
//     //      y=0x001;[[scope]:EC(FUNC)]
//     // EC(BLOCK)
//     //  作用域链<EC(BLOCK),EC(FUNC)>
//     //  变量提升：
//     //      var x; ->copy 5 ->3 ->4
//     //      var y; ->copy 0x001 ->0x002 [[scope]:EC(BLOCK)]
//     var x = 3;
//     var y = function anonymous1(){x = 4}
//     console.log(x);  // =>4
// }
// func(5);
// console.log(x); //=>1

function fn(x,y=5){
    // var z = 3 //形成两个上下文
    // function z(){ //不会产生两个私有上下文

    // }
}
fn(1,2);

